#include "stm32f10x.h"                  // Device header
#include "OLED.h"
#include "Serial.h"
#include "PWM.h"

// 变量声明区
extern uint16_t LED_state_old;
extern uint16_t LED_state_new;
extern uint16_t LED_Lightness_old;
extern uint16_t LED_Lightness_new;

//

void LED_Init(void)
{
    // Reset and clock control APB2 Peripheral Line Clock Commond
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);           //1. Peripheral 2. Write Enable
    GPIO_InitTypeDef GPIO_InitStructure;                            // 通过结构体配置初始化数据
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; 
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
    GPIO_Init(GPIOA, &GPIO_InitStructure);                          //1. Peripheral Name 2. 结构体地址
    GPIO_SetBits(GPIOA, GPIO_Pin_0 | GPIO_Pin_1);
}

void LED1_On(void)
{
    GPIO_ResetBits(GPIOA, GPIO_Pin_1);
}

void LED1_Off(void)
{
    GPIO_SetBits(GPIOA, GPIO_Pin_1);
}

void LED2_On(void)
{
    GPIO_ResetBits(GPIOA, GPIO_Pin_0);
}

void LED2_Off(void)
{
    GPIO_SetBits(GPIOA, GPIO_Pin_0);
}

void LED1_Turn(void)
{
    if (GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_1) == 0)
    {
        GPIO_SetBits(GPIOA, GPIO_Pin_1);
    }
    else 
    {
        GPIO_ResetBits(GPIOA, GPIO_Pin_1);
    }
}

void LED2_Turn(void)
{
    if (GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_0) == 0)
    {
        GPIO_SetBits(GPIOA, GPIO_Pin_0);
    }
    else 
    {
        GPIO_ResetBits(GPIOA, GPIO_Pin_0);
    }
}


void LED_prc(void)
{
    // 只有在状态改变时才执行动作
    if (LED_state_old != LED_state_new)
    {
        if (LED_state_new)
        {
            LED1_On();
            OLED_ShowString(2, 5, " ON");
        }
        else
        {
            LED1_Off();
            OLED_ShowString(2, 5, "OFF");
        }
        LED_state_old = LED_state_new;
        Serial_WriteData(0x4000, LED_state_new);
    }
    // 亮度调节
    if (LED_Lightness_old != LED_Lightness_new)
    {
        OLED_ShowNum(3, 11, LED_Lightness_new, 3);
    }
}
